import type { ChangeType } from './change/types'

/**
 * 运动员信息类型定义
 * 字段按照业务分类排序:基本信息 > 运动属性 > 注册信息 > 审核信息 > 学籍信息 > 证件材料 > 系统字段
 */
export interface AthleteInfo {
	// ============ 基本信息 ============
	id?: number // 主键ID
	userId?: number // 用户ID
	athleteName?: string // 运动员姓名
	sex?: number // 性别 (0=男, 1=女)
	birthday?: string // 出生日期
	nation?: number // 民族 字典
	idNumber?: string // 证件号码(加密存储)
	phoneNumber?: string // 手机号码
	address?: string // 联系地址/户籍地址
	emergencyContact?: string // 紧急联系人
	emergencyPhone?: string // 紧急联系电话
	avatar?: string // 头像
	personPhoto?: number // 个人照片 fileId
	status?: 0 | 1 // 身份状态 (0=正常, 1=停用)

	// ============ 运动属性 ============
	athleteLevel?: string // 运动员等级 (字典表: athlete_level)
	height?: number // 身高(cm)
	weight?: number // 体重(kg)
	bestResults?: string // 个人最好成绩
	firstTestBone?: string // 首次测试骨龄值
	isRetire?: 0 | 1 // 是否退役 (0=否, 1=是)

	// ============ 注册信息 ============
	registerNumber?: string // 注册证号
	registerStatus?: string // 注册状态
	registerTime?: string // 注册时间
	registerYear?: number | string // 注册年度
	firstRegisterYear?: number | string // 首次注册年度
	registerOrgId?: number // 注册单位ID(注册单位表) 后端只存这个 前端需要转换
	registerProjectList?: number[] // 注册项目ID列表(注册项目表)
	changeType?: ChangeType // 注册项目变更类型

	// ============ 训练信息 ============
	trainOrgType?: number // 在训单位类型(字典表: train_org_type)
	orgLevel?: number // 在训单位级别  后端字典
	trainOrgId?: number // 在训单位ID(在训单位表)

	coachName?: string // 现任教练
	projectCoach?: string // 项目中心教练
	trainingCoach?: string // 地方带训校教练
	conveyingCoach?: string // 输送教练员
	firstTrainingTime?: string // 首次集训时间
	cityTrainingTime?: string // 城市首次训练时间
	fieldAuthority?: string // 外地输送单位
	fieldTime?: string // 外地输送时间

	// ============ 协议信息 ============
	agreementStart?: string // 协议开始时间
	agreementEnd?: string // 协议结束时间

	// ============ 审核信息 ============
	approvalId?: string // 审批流程ID
	approvalStatus?: string | number // 审批流程状态（支持字符串和数字）
	auditStatus?: string // 审核状态 (approval=待审核, no_approval=无需审核, pass=通过, refuse=不通过)
	auditAdvice?: string // 审核建议
	auditor?: string // 审核人
	auditTime?: string // 审核时间
	recheckStatus?: string // 复审核状态 (approval=待审核, no_approval=无需审核, pass=通过, refuse=不通过)
	recheckAdvice?: string // 复审核建议
	recheckPeople?: string // 复审核人
	recheckTime?: string // 复审核时间

	// ============ 学籍信息 ============
	school?: string // 在读学校
	grade?: string // 在读年级
	studentNumber?: string // 学籍编号
	guardian?: string // 监护人
	guardianPhone?: string // 监护人联系方式

	// ============ 证件材料 ============
	authority?: string // 发证机关
	identityFront?: number // 身份证正面照片 fileId
	identityBack?: number // 身份证反面照片 fileId
	cardExpStart?: string // 证件有效期起始时间
	cardExpEnd?: string // 证件有效期截止时间
	qualifications?: number[] // 运动员资格证书 fileId数组
	otherMaterial?: number[] // 其他证明材料 fileId数组
	verifyIdentity?: 0 | 1 // 身份证验证 (0=否, 1=是)
	verifyFace?: 0 | 1 // 人脸验证 (0=否, 1=是)
	verifyFingerprint?: 0 | 1 // 指纹验证 (0=否, 1=是)

	// ============ 系统字段 ============
	createBy?: string // 创建人
	createTime?: string // 创建时间
	updateBy?: string // 更新人
	updateTime?: string // 更新时间
	isDeleted?: 0 | 1 // 删除标记 (0=未删除, 1=已删除)
	remark?: string // 备注
	yearId?: number // 年度确认ID

	[property: string]: any // 扩展字段
}

/**
 * 运动员查询参数
 */
export interface AthleteQueryParams {
	// 分页参数
	pageNum?: number
	pageSize?: number

	// 排序参数
	orderByColumn?: string
	isAsc?: string

	// 年度确认状态参数
	approvalStatus?: number

	[key: string]: any // 其他参数
}

/**
 * 运动员列表响应
 */
export interface AthleteListResponse {
	code: number
	msg: string
	data: {
		rows: AthleteInfo[]
		total: number
	}
}

/**
 * 运动员详情数据结构
 */
export interface AthleteDetailData {
	info: AthleteInfo // 运动员基本信息
	trains: AthleteTrainExp[] // 训练记录
	teams: AthleteTeamExp[] // 队伍信息
	races: AthleteRace[] // 比赛记录
	rewards: AthleteReward[] // 奖励记录
	levels: AthleteLevel[] // 运动员等级记录
	seeds: AthleteSeedChose[] // 苗子选拔记录
	changes?: any[] // 变更历史记录
}

/**
 * 运动员详情响应（完整结构）
 */
export interface AthleteDetailResponse {
	code: number
	msg: string
	data: AthleteDetailData
}

/**
 * 通用响应接口
 */
export interface CommonResponse {
	code: number
	msg: string
	data?: any
}

/**
 * 运动员状态枚举
 */
export enum AthleteStatus {
	NORMAL = 0, // 正常
	DISABLED = 1 // 停用
}

/**
 * 管理列表状态枚举
 */
export enum ManagementStatus {
	PENDING = 3, // 待处理
	APPROVED = 4, // 已核准
	REJECTED = 5, // 已驳回
	toRegister = 6, // 待确认注册
	notSubmit = 7, // 未提交
	ALL = 0 // 全部
}

/**
 * 公示类型枚举
 */
export enum PublicityType {
	REGISTER = 1, // 注册公示
	CHANGE = 2 // 变更公示
}

/**
 * 自动公示状态枚举
 */
export enum AutoPublicityStatus {
	DISABLED = 0, // 不自动公示
	ENABLED = 1 // 自动公示
}

/**
 * 公示设置参数接口
 */
export interface PublicitySettingsParams {
	autoPublicity?: number // 是否自动公示 (0=不自动公示, 1=自动公示)
	publicityType?: number // 公示类型 (1=注册公示, 2=变更公示)
}

/**
 * 公示设置响应接口
 */
export interface PublicitySettingsResponse {
	autoPublicity: number // 自动公示状态
	publicityType: number // 公示类型
	[key: string]: any // 其他字段
}

/**
 * 审核状态枚举
 */
export enum AuditState {
	APPROVAL = 'approval', // 待审核
	NO_APPROVAL = 'no_approval', // 无需审核
	PASS = 'pass', // 通过
	REFUSE = 'refuse' // 不通过
}

/**
 * 性别枚举
 */
export enum Gender {
	MALE = 0, // 男
	FEMALE = 1 // 女
}

/**
 * 验证状态枚举
 */
export enum VerifyStatus {
	NO = 0, // 否
	YES = 1 // 是
}

/**
 * 在训单位类型（示例枚举，实际可由字典接口驱动）
 */
export enum trainOrgType {
	TEAM = 'team', // 队（省/市队）
	SCHOOL = 'school', // 学校
	CLUB = 'club', // 俱乐部
	sportSchool = 'sportSchool', // 体校
	ASSOCIATION = 'association', // 协会
	OTHER = 'other' // 其他
}

/**
 * 运动员训练经历接口
 */
export interface AthleteTrainExp {
	id?: number // 主键ID
	infoId?: number // 运动员信息ID
	trainOrgId?: number // 训练单位ID
	trainPlace?: string // 训练地点
	trainTime?: string // 训练时间
	trainType?: string // 训练类型
	trainResults?: string // 训练成果
	// 前端组件用字段（级联选择器）
	trainOrgCascade?: number[] // 训练机构级联选择器值
	createTime?: string // 创建时间
	updateTime?: string // 更新时间
	remark?: string // 备注
}

/**
 * 运动员集训经历接口
 */
export interface AthleteTeamExp {
	id?: number // 主键ID
	infoId?: number // 运动员信息ID
	teamName?: string // 队伍名称
	teamType?: string // 队伍类型
	trainType?: string // 集训类型字段（处理历史兼容性）
	joinTime?: string // 加入时间
	leaveTime?: string // 离开时间
	position?: string // 职位/角色
	achievements?: string // 成就
	createTime?: string // 创建时间
	updateTime?: string // 更新时间
	remark?: string // 备注
}

/**
 * 运动员比赛信息接口
 */
export interface AthleteRace {
	id?: number // 主键ID
	infoId?: number // 运动员信息ID
	raceName?: string // 比赛名称
	raceType?: string // 比赛类型
	raceLevel?: number | string // 比赛级别（支持数字和字符串）
	raceTime?: string // 比赛时间
	racePlace?: string // 比赛地点
	result?: string // 比赛成绩
	ranking?: number // 排名
	award?: string // 获得奖项
	// 与 CompetitionRecord 兼容的字段
	raceGroup?: string // 比赛组别
	raceMajor?: string // 比赛大项
	raceMinor?: string // 比赛小项
	raceRank?: string // 比赛名次
	raceGrade?: string // 比赛成绩
	racePoint?: string // 比赛积分
	trainCoach?: string // 带训教练
	gradeLevel?: string // 成绩等级
	raceLevelLabel?: string // 赛事级别标签
	createTime?: string // 创建时间
	updateTime?: string // 更新时间
	remark?: string // 备注
}

/**
 * 运动员等级接口
 */
export interface AthleteLevel {
	id?: number // 主键ID
	infoId?: number // 运动员信息ID
	assessLevel?: string // 评定等级
	assessMajor?: string // 评定专项
	assessMinor?: string // 评定副项
	assessTime?: string // 评定时间
	assessOrg?: string // 评定机构
	certNumber?: string // 证书编号
	validStart?: string // 有效期开始
	validEnd?: string // 有效期结束
	createTime?: string // 创建时间
	updateTime?: string // 更新时间
	remark?: string // 备注
}

/**
 * 运动员奖罚记录接口
 */
export interface AthleteReward {
	id?: number // 主键ID
	infoId?: number // 运动员信息ID
	rewardTime?: string // 奖罚时间
	rewardContent?: string // 奖罚内容
	rewardQuality?: string // 奖罚性质（奖励/处罚）
	rewardLevel?: string // 奖罚级别
	rewardOrg?: string // 奖罚机构
	certNumber?: string // 证书编号
	createTime?: string // 创建时间
	updateTime?: string // 更新时间
	remark?: string // 备注
}

/**
 * 运动员苗子选拔接口
 */
export interface AthleteSeedChose {
	id?: number // 主键ID
	infoId?: number // 运动员信息ID
	testTime?: string // 测试时间
	testProjectId?: number // 测试项目ID
	testPlace?: string // 测试地点
	testResults?: string // 测试结果
	selectionStatus?: string // 选拔状态
	evaluator?: string // 评估人
	createTime?: string // 创建时间
	updateTime?: string // 更新时间
	remark?: string // 备注
}

/**
 * 年度确认设置接口
 */
export interface AthleteYearSet {
	createBy?: string // 创建人
	createTime?: string // 创建时间
	id?: number // 主键ID
	isDeleted?: number // 删除标记 (0=未删除, 1=已删除)
	/**
	 * 结束月日 (MM-DD格式)
	 */
	monthDayEnd?: string
	/**
	 * 开始月日 (MM-DD格式)
	 */
	monthDayStart?: string
	remark?: string // 备注
	updateBy?: string // 更新人
	updateTime?: string // 更新时间
	/**
	 * 确认结束年：1-当年，2-次年
	 */
	yearEnd?: number
	/**
	 * 确认开始年：1-当年，2-次年
	 */
	yearStart?: number
	[property: string]: any // 扩展字段
}
